IP Address,全稱 Internet Protocol Address,又譯為網際網路協定位址,是網際協定中用於標識傳送或接收資料裝置的一串數字。
相當於每個在網路上的電腦的地址
常見的 IP 位址分為IPv4與IPv6兩大類,IP 位址由一串數字組成
IPv4 為 32 位元長,通常書寫時以四組十進位數字組成,並以點分隔,如:172.16.254.1
IPv4 每 8 個 digit 都會被轉換為 0 到 255 之間的整數,因此,IPv4 通常是 168.1.7.0 而不是 10101000.00000001.00000111.00000000,用前者更容易讓人記憶
根據 IPv4 地址的格式,全世界有多少個不同的設備可以同時上網?
32bits 可以製作出 2^32 個不同的 IP 地址, 2^32=4294967296, ,約 43 億
但是,這個世界上大約有 72 億人,且每個人可能擁有超過 1 個與網路連接的設備,所以用 IPv4 地址的格式可能會有一天不夠用
因此,IPv6 於 1990 年代引入,IPv6 使用128 位元,將確保地球上的每一個人、裝置、每一塊岩石和沙子都能夠擁有一個 IPv6 地址
IPv6 通常書寫時以八組十六進位數字組成,以冒號分割,如:2001:db8:0:1234:0:567:8:1
Domain Name System,是網際網路的一項服務
它作為將域名 Domain Name 和 IP 位址相互對映的一個分散式資料庫,能夠使人更方便地存取網際網路
DNS 旨在讓人們記住域名,而不是無意義的數字。 例如,記住www.youtube.com 比記住168.112.0.12更容易
DNS 系統運作方式:
如果要去 youtube.com(Domain Name),DNS 會自動把它轉成 IP Address,再把 HTTP Request 寄出
伺服器中的 port 是網路通訊連接時,邏輯上的端點 endpoint,用於在伺服器和客戶端之間交換信息,每個 port 被分配一個唯一的數字來單獨識別它們
一個伺服器可以同時提供多種服務,每個服務有相對應的 port,客戶端可以根據需求,透過連結到伺服器上不同的 port 來與伺服器互動
一些最常用的端口及其相關的網絡協議是:
Port 號碼 | 用途 |
---|---|
20, 21 | 文件傳輸協議 File Transfer Protocol (FTP). FTP is for transferring files between a client and a server. |
22 | 網路資訊交換、連接協議 Secure Shell (SSH). SSH is one of many protocols that create secure network connections. |
25 | 郵件傳輸協議 Simple Mail Transfer Protocol (SMTP). SMTP is used for email. |
80 | Web 傳輸協議 Hypertext Transfer Protocol (HTTP). |
443 | HTTP Secure (HTTPS). All HTTPS web traffic goes to port 443. |
3389 | 遠端控制 Remote Desktop Protocol (RDP). RDP enables users to remotely connect to their desktop computers from another device. |
例如:Google 伺服器是https://www.google.com ,我們希望發出HTTPs Request,則可以對著https://www.google.com:443 發出請求,即可連線到Google伺服器上處理HTTPs請求的port
因為沒有必要顯示,所以網址後面的:443 通常在網頁瀏覽器上是看不到的
另一方面,Google 伺服器有著 24 小時不停止運作的腳本語言,在處理任何來自 port 443 的請求
腳本的 Pseudocode 如下:
app.listen(20, () => { return a file to client}) //處理FTP請求
app.listen(25, () => { return an email to client}) //處理SMTP請求
app.listen(443, () => { return a webpage to client}) // 處理HTTPs請求
在電腦網絡中,localhost 意為「本地主機」,是給迴路網絡接口 loopback 的一個標準主機名,相對應的 IP 位址為 127.0.0.1(IPv4)
在 DNS 中,localhost 這個 domain name 會被換成 127.0.0.1
我們可以在自己的電腦上面架設並且運行伺服器,當我們要使用同一台電腦連結到在自己的電腦上面伺服器,可以透過寄送請求到 localhost 到自己的電腦上,這就是迴路網絡接口 loopback
通常我們在本機上的網頁伺服器,都是使用 port 3000 或是 8080(也可以設定任何 1000 到 9999 內的數字,但不可以設定到常用的 port 號碼)
HTTP Request 以及 Response 的基本規定格式如下:
HTTP 協議中定義 client 跟 server 要請求內容時,有 4 種請求方式:
一個基礎的 Get Request 會是:
<!--- GET -> HTTP verb(可以是GET, POST, PUT, DELETE) --->
<!--- HTTP/1.1 -> 使用 HTTP 1.1 的協議 -->
GET /index.html HTTP/1.1
<!--- header 的部分,HOST -> 要找的server是誰(URL) -->
HOST: Phoebe.edu
<!--- HTTP內容到這邊停止 -->
<BLANK LINE>
一個基礎的 Response 會是:
<!--- 如果 server 同意存取東西 status code -> 200 OK --->
HTTP/1.1 200 OK
<!--- header 的部分,Content-Length -> 空格之後,網頁長度有多長 --->
Content-Length: 1555
Content-Type: text/html; charset=ISO-8859-1
<!DOCTYPE html>
<html>
<body>
...
如果網頁交出表格資料,且使用GET request
的話,會是:
<!--- 資料會放在網址後面 --->
GET /index.html?name=Phoebe&age=23 HTTP/1.1
HOST: Phoebe.edu
<BLANK LINE>
Post Request
內部有表格資料的話,會是:
POST /index.html HTTP/1.1
<!--- header,資料會接在header空格後 --->
HOST: Phoebe.edu
<!--- Content-Type 指下面的訊息是會被隱藏起來 --->
Content-Type: application/x-www-form-urlencode
Content-Length: 33
field1=value&field2=value2
帶有cookie
設定的 request:
GET /index.html HTTP/1.1
<!--- header,設定cookie --->
HOST: Phoebe.edu
SET-COOKIES: session_id = adsfklasdklf
<BLANK LINE>
帶有cookie
設定的 response:
HTTP/1.1 200 OK
<!--- header,設定cookie --->
Content-Length: 200
Content-Type: text/html
SET-COOKIES: session_id = adsfklasdklfjaslke;fja;sd
<!DOCTYPE html>
下一篇文章學習SQL介紹、表格設定。